home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text.html;
-
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.Shape;
- import java.awt.Toolkit;
- import java.awt.event.InputEvent;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.event.MouseMotionListener;
- import java.awt.image.ImageObserver;
- import java.io.BufferedInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.FilterInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.Dictionary;
- import javax.swing.Icon;
- import javax.swing.ImageIcon;
- import javax.swing.JEditorPane;
- import javax.swing.event.DocumentEvent;
- import javax.swing.text.AbstractDocument;
- import javax.swing.text.AttributeSet;
- import javax.swing.text.BadLocationException;
- import javax.swing.text.Document;
- import javax.swing.text.Element;
- import javax.swing.text.JTextComponent;
- import javax.swing.text.Position;
- import javax.swing.text.SimpleAttributeSet;
- import javax.swing.text.StyledDocument;
- import javax.swing.text.View;
- import javax.swing.text.ViewFactory;
- import javax.swing.text.Position.Bias;
- import javax.swing.text.html.HTML.Attribute;
- import javax.swing.text.html.HTML.Tag;
-
- class ImageView extends View implements ImageObserver, MouseListener, MouseMotionListener {
- public static final String TOP = "top";
- public static final String TEXTTOP = "texttop";
- public static final String MIDDLE = "middle";
- public static final String ABSMIDDLE = "absmiddle";
- public static final String CENTER = "center";
- public static final String BOTTOM = "bottom";
- private static boolean sIsInc = true;
- private static int sIncRate = 100;
- private AttributeSet attr;
- private Element fElement;
- private Image fImage;
- private int fHeight;
- private int fWidth;
- private Container fContainer;
- private Rectangle fBounds;
- private Component fComponent;
- private Point fGrowBase;
- private boolean fGrowProportionally;
- private boolean loading;
- private static Icon sPendingImageIcon;
- private static Icon sMissingImageIcon;
- private static final String PENDING_IMAGE_SRC = "icons/image-delayed.gif";
- private static final String MISSING_IMAGE_SRC = "icons/image-failed.gif";
- private static final boolean DEBUG = false;
- static final String IMAGE_CACHE_PROPERTY = "imageCache";
- private static final int DEFAULT_WIDTH = 32;
- private static final int DEFAULT_HEIGHT = 32;
- private static final int DEFAULT_BORDER = 2;
- // $FF: synthetic field
- static Class class$javax$swing$text$html$ImageView;
-
- public ImageView(Element var1) {
- super(var1);
- this.initialize(var1);
- StyleSheet var2 = this.getStyleSheet();
- this.attr = var2.getViewAttributes(this);
- }
-
- public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- super.changedUpdate(var1, var2, var3);
- float var4 = this.getVerticalAlignment();
- int var5 = this.fHeight;
- int var6 = this.fWidth;
- this.initialize(((View)this).getElement());
- boolean var7 = this.fHeight != var5;
- boolean var8 = this.fWidth != var6;
- if (var7 || var8 || this.getVerticalAlignment() != var4) {
- ((View)this).getParent().preferenceChanged(this, var7, var8);
- }
-
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- public float getAlignment(int var1) {
- switch (var1) {
- case 1:
- return this.getVerticalAlignment();
- default:
- return super.getAlignment(var1);
- }
- }
-
- public AttributeSet getAttributes() {
- return this.attr;
- }
-
- int getBorder() {
- return this.getIntAttr(Attribute.BORDER, this.isLink() ? 2 : 0);
- }
-
- Color getBorderColor() {
- StyledDocument var1 = (StyledDocument)((View)this).getDocument();
- return var1.getForeground(this.getAttributes());
- }
-
- protected Color getHighlightColor() {
- JTextComponent var1 = (JTextComponent)this.fContainer;
- return var1.getSelectionColor();
- }
-
- private int getIntAttr(HTML.Attribute var1, int var2) {
- AttributeSet var3 = this.fElement.getAttributes();
- if (var3.isDefined(var1)) {
- String var5 = (String)var3.getAttribute(var1);
- int var4;
- if (var5 == null) {
- var4 = var2;
- } else {
- try {
- var4 = Math.max(0, Integer.parseInt(var5));
- } catch (NumberFormatException var6) {
- var4 = var2;
- }
- }
-
- return var4;
- } else {
- return var2;
- }
- }
-
- public float getPreferredSpan(int var1) {
- int var2 = 2 * (this.getBorder() + this.getSpace(var1));
- switch (var1) {
- case 0:
- return (float)(this.fWidth + var2);
- case 1:
- return (float)(this.fHeight + var2);
- default:
- throw new IllegalArgumentException("Invalid axis: " + var1);
- }
- }
-
- protected int getSelectionState() {
- int var1 = this.fElement.getStartOffset();
- int var2 = this.fElement.getEndOffset();
- if (this.fContainer instanceof JTextComponent) {
- JTextComponent var3 = (JTextComponent)this.fContainer;
- int var4 = var3.getSelectionStart();
- int var5 = var3.getSelectionEnd();
- if (var4 <= var1 && var5 >= var2) {
- if (var4 == var1 && var5 == var2 && this.isEditable()) {
- return 2;
- }
-
- return 1;
- }
- }
-
- return 0;
- }
-
- private URL getSourceURL() {
- String var1 = (String)this.fElement.getAttributes().getAttribute(Attribute.SRC);
- if (var1 == null) {
- return null;
- } else {
- URL var2 = ((HTMLDocument)((View)this).getDocument()).getBase();
-
- try {
- URL var3 = new URL(var2, var1);
- return var3;
- } catch (MalformedURLException var4) {
- return null;
- }
- }
- }
-
- int getSpace(int var1) {
- return this.getIntAttr(var1 == 0 ? Attribute.HSPACE : Attribute.VSPACE, 0);
- }
-
- protected StyleSheet getStyleSheet() {
- HTMLDocument var1 = (HTMLDocument)((View)this).getDocument();
- return var1.getStyleSheet();
- }
-
- float getVerticalAlignment() {
- String var1 = (String)this.fElement.getAttributes().getAttribute(Attribute.ALIGN);
- if (var1 != null) {
- var1 = var1.toLowerCase();
- if (var1.equals("top") || var1.equals("texttop")) {
- return 0.0F;
- }
-
- if (var1.equals("center") || var1.equals("middle") || var1.equals("absmiddle")) {
- return 0.5F;
- }
- }
-
- return 1.0F;
- }
-
- boolean hasPixels(ImageObserver var1) {
- return this.fImage != null && this.fImage.getHeight(var1) > 0 && this.fImage.getWidth(var1) > 0;
- }
-
- public boolean imageUpdate(Image var1, int var2, int var3, int var4, int var5, int var6) {
- if (this.fImage != null && this.fImage == var1) {
- if ((var2 & 192) != 0) {
- this.fImage = null;
- this.repaint(0L);
- return false;
- } else {
- short var7 = 0;
- if ((var2 & 2) != 0 && !((View)this).getElement().getAttributes().isDefined(Attribute.HEIGHT)) {
- var7 = (short)(var7 | 1);
- }
-
- if ((var2 & 1) != 0 && !((View)this).getElement().getAttributes().isDefined(Attribute.WIDTH)) {
- var7 = (short)(var7 | 2);
- }
-
- synchronized(this){}
-
- try {
- if ((var7 & 1) == 1) {
- this.fWidth = var5;
- }
-
- if ((var7 & 2) == 2) {
- this.fHeight = var6;
- }
-
- if (this.loading) {
- boolean var17 = true;
- return var17;
- }
- } catch (Throwable var16) {
- throw var16;
- }
-
- if (var7 != 0) {
- Document var8 = ((View)this).getDocument();
-
- try {
- if (var8 instanceof AbstractDocument) {
- ((AbstractDocument)var8).readLock();
- }
-
- ((View)this).preferenceChanged(this, true, true);
- } finally {
- if (var8 instanceof AbstractDocument) {
- ((AbstractDocument)var8).readUnlock();
- }
-
- }
-
- return true;
- } else {
- if ((var2 & 48) != 0) {
- this.repaint(0L);
- } else if ((var2 & 8) != 0 && sIsInc) {
- this.repaint((long)sIncRate);
- }
-
- return (var2 & 32) == 0;
- }
- }
- } else {
- return false;
- }
- }
-
- private void initialize(Element var1) {
- synchronized(this){}
-
- try {
- this.loading = true;
- this.fWidth = this.fHeight = 0;
- } catch (Throwable var26) {
- throw var26;
- }
-
- int var2 = 0;
- int var3 = 0;
- boolean var4 = false;
- boolean var5 = false;
-
- try {
- this.fElement = var1;
- AttributeSet var8 = var1.getAttributes();
- URL var9 = this.getSourceURL();
- if (var9 != null) {
- Dictionary var10 = (Dictionary)((View)this).getDocument().getProperty("imageCache");
- if (var10 != null) {
- this.fImage = (Image)var10.get(var9);
- } else {
- this.fImage = Toolkit.getDefaultToolkit().getImage(var9);
- }
- }
-
- var3 = this.getIntAttr(Attribute.HEIGHT, -1);
- var5 = var3 > 0;
- if (!var5 && this.fImage != null) {
- var3 = this.fImage.getHeight(this);
- }
-
- if (var3 <= 0) {
- var3 = 32;
- }
-
- var2 = this.getIntAttr(Attribute.WIDTH, -1);
- var4 = var2 > 0;
- if (!var4 && this.fImage != null) {
- var2 = this.fImage.getWidth(this);
- }
-
- if (var2 <= 0) {
- var2 = 32;
- }
-
- if (this.fImage != null) {
- if (var4 && var5) {
- Toolkit.getDefaultToolkit().prepareImage(this.fImage, var3, var2, this);
- } else {
- Toolkit.getDefaultToolkit().prepareImage(this.fImage, -1, -1, this);
- }
- }
- } finally {
- synchronized(this){}
-
- try {
- this.loading = false;
- if (var4 || this.fWidth == 0) {
- this.fWidth = var2;
- }
-
- if (var5 || this.fHeight == 0) {
- this.fHeight = var3;
- }
- } catch (Throwable var27) {
- throw var27;
- }
-
- }
-
- }
-
- protected boolean isEditable() {
- return this.fContainer instanceof JEditorPane && ((JEditorPane)this.fContainer).isEditable();
- }
-
- boolean isLink() {
- AttributeSet var1 = (AttributeSet)this.fElement.getAttributes().getAttribute(Tag.A);
- return var1 != null ? var1.isDefined(Attribute.HREF) : false;
- }
-
- private void loadIcons() {
- try {
- if (sPendingImageIcon == null) {
- sPendingImageIcon = this.makeIcon("icons/image-delayed.gif");
- }
-
- if (sMissingImageIcon == null) {
- sMissingImageIcon = this.makeIcon("icons/image-failed.gif");
- }
- } catch (Exception var1) {
- System.err.println("ImageView: Couldn't load image icons");
- }
-
- }
-
- private Icon makeIcon(String var1) throws IOException {
- InputStream var2 = HTMLEditorKit.getResourceAsStream(var1);
- if (var2 == null) {
- System.err.println((class$javax$swing$text$html$ImageView != null ? class$javax$swing$text$html$ImageView : (class$javax$swing$text$html$ImageView = class$("javax.swing.text.html.ImageView"))).getName() + "/" + var1 + " not found.");
- return null;
- } else {
- BufferedInputStream var3 = new BufferedInputStream(var2);
- ByteArrayOutputStream var4 = new ByteArrayOutputStream(1024);
- byte[] var5 = new byte[1024];
-
- int var6;
- while((var6 = ((FilterInputStream)var3).read(var5)) > 0) {
- var4.write(var5, 0, var6);
- }
-
- ((FilterInputStream)var3).close();
- ((OutputStream)var4).flush();
- var5 = var4.toByteArray();
- if (var5.length == 0) {
- System.err.println("warning: " + var1 + " is zero-length");
- return null;
- } else {
- return new ImageIcon(var5);
- }
- }
- }
-
- public Shape modelToView(int var1, Shape var2, Position.Bias var3) throws BadLocationException {
- int var4 = ((View)this).getStartOffset();
- int var5 = ((View)this).getEndOffset();
- if (var1 >= var4 && var1 <= var5) {
- Rectangle var6 = var2.getBounds();
- if (var1 == var5) {
- var6.x += var6.width;
- }
-
- var6.width = 0;
- return var6;
- } else {
- return null;
- }
- }
-
- public void mouseClicked(MouseEvent var1) {
- var1.getClickCount();
- }
-
- public void mouseDragged(MouseEvent var1) {
- if (this.fGrowBase != null) {
- Point var2 = this.fComponent.getLocationOnScreen();
- int var3 = Math.max(2, var2.x + var1.getX() - this.fGrowBase.x);
- int var4 = Math.max(2, var2.y + var1.getY() - this.fGrowBase.y);
- if (((InputEvent)var1).isShiftDown() && this.fImage != null) {
- float var5 = (float)this.fImage.getWidth(this);
- float var6 = (float)this.fImage.getHeight(this);
- if (var5 > 0.0F && var6 > 0.0F) {
- float var7 = var6 / var5;
- float var8 = (float)var4 / var7;
- float var9 = (float)var3 * var7;
- if (var8 > (float)var3) {
- var3 = (int)var8;
- } else {
- var4 = (int)var9;
- }
- }
- }
-
- this.resize(var3, var4);
- }
-
- }
-
- public void mouseEntered(MouseEvent var1) {
- }
-
- public void mouseExited(MouseEvent var1) {
- }
-
- public void mouseMoved(MouseEvent var1) {
- }
-
- public void mousePressed(MouseEvent var1) {
- Dimension var2 = this.fComponent.getSize();
- if (var1.getX() >= var2.width - 7 && var1.getY() >= var2.height - 7 && this.getSelectionState() == 2) {
- Point var8 = this.fComponent.getLocationOnScreen();
- this.fGrowBase = new Point(var8.x + var1.getX() - this.fWidth, var8.y + var1.getY() - this.fHeight);
- this.fGrowProportionally = ((InputEvent)var1).isShiftDown();
- } else {
- this.fGrowBase = null;
- JTextComponent var3 = (JTextComponent)this.fContainer;
- int var4 = this.fElement.getStartOffset();
- int var5 = this.fElement.getEndOffset();
- int var6 = var3.getCaret().getMark();
- int var7 = var3.getCaret().getDot();
- if (((InputEvent)var1).isShiftDown()) {
- if (var6 <= var4) {
- var3.moveCaretPosition(var5);
- } else {
- var3.moveCaretPosition(var4);
- }
- } else {
- if (var6 != var4) {
- var3.setCaretPosition(var4);
- }
-
- if (var7 != var5) {
- var3.moveCaretPosition(var5);
- }
- }
- }
-
- }
-
- public void mouseReleased(MouseEvent var1) {
- this.fGrowBase = null;
- }
-
- public void paint(Graphics var1, Shape var2) {
- Color var3 = var1.getColor();
- this.fBounds = var2.getBounds();
- int var4 = this.getBorder();
- int var5 = this.fBounds.x + var4 + this.getSpace(0);
- int var6 = this.fBounds.y + var4 + this.getSpace(1);
- int var7 = this.fWidth;
- int var8 = this.fHeight;
- int var9 = this.getSelectionState();
- if (!this.hasPixels(this)) {
- var1.setColor(Color.lightGray);
- var1.drawRect(var5, var6, var7 - 1, var8 - 1);
- var1.setColor(var3);
- this.loadIcons();
- Icon var10 = this.fImage == null ? sMissingImageIcon : sPendingImageIcon;
- if (var10 != null) {
- var10.paintIcon(((View)this).getContainer(), var1, var5, var6);
- }
- }
-
- if (this.fImage != null) {
- var1.drawImage(this.fImage, var5, var6, var7, var8, this);
- }
-
- Color var12 = this.getBorderColor();
- if (var9 == 2) {
- int var11 = 2 - var4;
- if (var11 > 0) {
- var5 += var11;
- var6 += var11;
- var7 -= var11 << 1;
- var8 -= var11 << 1;
- var4 = 2;
- }
-
- var12 = null;
- var1.setColor(Color.black);
- var1.fillRect(var5 + var7 - 5, var6 + var8 - 5, 5, 5);
- }
-
- if (var4 > 0) {
- if (var12 != null) {
- var1.setColor(var12);
- }
-
- for(int var13 = 1; var13 <= var4; ++var13) {
- var1.drawRect(var5 - var13, var6 - var13, var7 - 1 + var13 + var13, var8 - 1 + var13 + var13);
- }
-
- var1.setColor(var3);
- }
-
- }
-
- protected void repaint(long var1) {
- if (this.fContainer != null && this.fBounds != null) {
- this.fContainer.repaint(var1, this.fBounds.x, this.fBounds.y, this.fBounds.width, this.fBounds.height);
- }
-
- }
-
- protected void resize(int var1, int var2) {
- if (var1 != this.fWidth || var2 != this.fHeight) {
- this.fWidth = var1;
- this.fHeight = var2;
- SimpleAttributeSet var3 = new SimpleAttributeSet();
- var3.addAttribute(Attribute.WIDTH, Integer.toString(var1));
- var3.addAttribute(Attribute.HEIGHT, Integer.toString(var2));
- ((StyledDocument)((View)this).getDocument()).setCharacterAttributes(this.fElement.getStartOffset(), this.fElement.getEndOffset(), var3, false);
- }
- }
-
- public void setParent(View var1) {
- super.setParent(var1);
- this.fContainer = var1 != null ? ((View)this).getContainer() : null;
- if (var1 == null && this.fComponent != null) {
- this.fComponent.getParent().remove(this.fComponent);
- this.fComponent = null;
- }
-
- }
-
- public void setSize(float var1, float var2) {
- }
-
- public int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4) {
- Rectangle var5 = (Rectangle)var3;
- if (var1 < (float)(var5.x + var5.width)) {
- var4[0] = Bias.Forward;
- return ((View)this).getStartOffset();
- } else {
- var4[0] = Bias.Backward;
- return ((View)this).getEndOffset();
- }
- }
- }
-